Как вариант, сделать так, что бы модель была разбита на множество текстур которые раскиданы по самым дурацким путям. Ни какой картодел не будет вытаскивать такую модель, ни за что.
quq_CCCP, а можно поподробнее? И это защитит карту от инжекта?
Подробно - это сделай за меня?
Суть:
call BJDebugMsg( I2Sx( 100500 ) )
Выдаст разные значения в депротектнутой и нормальной картах, пока это теория но возьмите и проверьте. I2Sx - фольклорная функция ретурн бага, суть преобразует хеш от строки в строку. именно хеш а не инт. т.е адрес в таблице строк на строку. вот RetunrBug ( www.hiveworkshop.com/threads/accessing-memory-from-the-script-it... ) функция в либе Typecast - I2SH
Ну кароче проверил:
function Trig_J_Test_Actions takes nothing returns nothing
local integer i = 486
local string str = null
set str = S2S( I2SH( i ) )
call BJDebugMsg( str )
set str = null
endfunction
//===========================================================================
function InitTrig_J_Test takes nothing returns nothing
set gg_trg_J_Test = CreateTrigger( )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_J_Test, Player(0) )
call TriggerAddAction( gg_trg_J_Test, function Trig_J_Test_Actions )
endfunction
При добавлении, удалении 3 функций сменяется строка по этому адресу, самое главное найти последнюю строку (ну или как я от балды ввел число) хотя я не уверен что прокатит с числом от балды, нужно найти последнюю строку на момент загрузки карты и смотреть её адрес, а после смотреть что будет записано по этому адресу в таблице строк.
Karp, Ой способов защиты 100500, щяс есть мемхак, я уже выкладывал пример как проверить вводились ли в код карты измненения.
Так же есть возможность писать код карты байткодами, которые внезапно низя прочитать или перевести в JASS это внутренние инстркции JASS машины. Но это достаточно сложно. Так же Можно загружать свои ДЛЛ, а это дает полный контроль над картой, можно зашифровать и сжать данные в архиве хер знает какими алгоритмами которые никогда не видел варкравт, а при загрузке срипта вызывать Дллку которая бы и расшифровывала это дело и вызывала функцию чтения архива + проверяла контрольную сумму архива (вроде в мемхаке была эта функция), контрульная сумма не та - выгружаем из ДЛЛ вирус, чтонить на подобии шифровальщиков. И читерам уже не до карты и варкравта в целом...
Это не для гуи новичков, придется долго морщить лоб и писать карту на jass + малость в с++ шарить.
если цель точка то на кого он баф повешает?
на точку?
или он должен прочесть твои мысли чтобы знать кого бафать
Триггерно UnitAddAbility (unit, 'ай-ди баффа') - не работает.
и не должно работать
для бафов нужен дамикаст
например чтобы повесить кровожадность создаёшь дами юнита со скилом кровожадность и приказываешь кастануть его на юнита
потом убираешь дами юнита
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек
Если это кому-то ещё интересно - я нашёл простое решение. Условие - юнит не умеет сражаться в ближнем бою и может атаковать исключительно при наличии стрел. Полагаю изначальный вопрос именно это подразумевал.
-Нужно дать юниту способность предметы(герой). Установить в РО юниту: Бой-атака1-допустимые цели-Нет.
-Н настроить все нужные данные во второй атаке. Не забыв указать тип атаки и тип оружия.
-Стрелы сделать на основе предмета огненного шара (и иже с ним).
-Взять какую-нибудь наработку для стака предметов. Чтобы подбирая стрелы они складывались в инве у юнита в одну ячейку.
-Использовать триггер, для того, чтобы стрелы расходовались:
События:
-Unit Атакован.
Условия:
-Unit-Type of Atacking Unit равно <нужный тип войск(лучники)> Через Or можно ввести несколько типов юнитов
Действия:
-Предмет - Set charges remaining in (Item carried by (attacking unit) of type <наши стрелы>) - выбираем arithmetic, выбираем в нём то же - Set charges remain... ставим знак минус и выбираем 1. в спиcке чарджз ремеининга выбрать Item carried by Hero of Type назначить вместо героя тип атакующего юнита и указать тип артефакта. Теперь нужно сделать, чтобы стрелы, после того, как кончатся, однозначно исчезли из инвентаря боевой единицы.
-If/then/else
указать условие integer compasion set charges... (всё точно как в предыдущем действии) меньше 1
то
-Предмет - remove (Item cerried By (Attacking unit) of type <стрелы>)
иначе Do nothing
quq_CCCP:
Спасибо, понял что надо создавать форс единожды, чтобы утечек не было
Мдаа уж, оказывается все дело в том, что забыл поставить исходные позиции другим игрокам, хорошо хоть проверить догадался, засиделся за редактором
ии я очень сложный замутил 4х ступенчатый (не для босов)так как при строительстве его я думал что движок будет пулять спеллы,его придёться переписывать,но я нашел решение если за моба стоит комп то спелы во вкладке нейтрально посивные он будет юзать но не все главное условие чтобы был комп назначен
вероятность 75% поврежден файл (что-то например лагнуло при сохранении прошлом). Если все в игре идеально работает, то только одно объяснение приходит на ум - темные силы.
Ток бекап, видимо синий экран вылетел в момен когда редактор удалил старую карту и начал создавать новую, сохраняя данные в архив - архив битый, т.к не содержит всех данных, которые не были сохранены редактором.
Если используешь JNGP - то папочка backups в помощь, там твои труды за полгода=)
проведя еще пару часов за тестами, в голову пришла мысль о фаталках из-за большого числа юнитов на мелководье
остановился на том, что ошибка вылетела из-за случайных точек спауна по квадрату на мелко-глубкоководной местности. сделал спаун в отдельных мини областях - ошибка исчезла
Защитить mpq (а карта это тот-же mpq с минимумом отличий) так чтобы его не мог понять никто можно, беда в том, что тогда его не поймет и сам варкрафт. Большинство простых mpq редакторов испоьлзуют ту-же библиотеку для работы с MPQ что и сам варкрафт, что это значит, думаю, догадаться не сложно.
Как вариант, сделать так, что бы модель была разбита на множество текстур которые раскиданы по самым дурацким путям. Ни какой картодел не будет вытаскивать такую модель, ни за что.
quq_CCCP, а можно поподробнее? И это защитит карту от инжекта?
Подробно - это сделай за меня?
Суть:
call BJDebugMsg( I2Sx( 100500 ) )
Выдаст разные значения в депротектнутой и нормальной картах, пока это теория но возьмите и проверьте. I2Sx - фольклорная функция ретурн бага, суть преобразует хеш от строки в строку. именно хеш а не инт. т.е адрес в таблице строк на строку. вот RetunrBug ( www.hiveworkshop.com/threads/accessing-memory-from-the-script-it... ) функция в либе Typecast - I2SH
Ну кароче проверил:
function Trig_J_Test_Actions takes nothing returns nothing
local integer i = 486
local string str = null
set str = S2S( I2SH( i ) )
call BJDebugMsg( str )
set str = null
endfunction
//===========================================================================
function InitTrig_J_Test takes nothing returns nothing
set gg_trg_J_Test = CreateTrigger( )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_J_Test, Player(0) )
call TriggerAddAction( gg_trg_J_Test, function Trig_J_Test_Actions )
endfunction
При добавлении, удалении 3 функций сменяется строка по этому адресу, самое главное найти последнюю строку (ну или как я от балды ввел число) хотя я не уверен что прокатит с числом от балды, нужно найти последнюю строку на момент загрузки карты и смотреть её адрес, а после смотреть что будет записано по этому адресу в таблице строк.
Оказывается можно, просто mdlvis неправильно работает с нормалями, в war3 model editor'е всё корректно отображается.
Чтобы избежать изменение направления нормалей, просто не надо сохранять модель в mdlvis'е.
для блендера есть только один плагин - импортёр...
который глючный и совсем негодный...
напрямую конвертить не получится...
уж тем более с анимациями...
есть вариант конверта в милкшейп (опять че через сторонний аддон), а оттуда в .мдх
конвертит хорошо, с костями, но анимацию убивает...
есть NeoDex для 3dsMax, в котором по плану можно делать всё и конвертить напрямую в .мдх...
повторю опять свой вопрос
у тебя в папке есть файлы формата mpq?
если есть то открой их другим архиватором
если нету то это твои проблемы и никто тебе не поможет
Уже есть самостоятельная идея... По похожему принципу уже действует другой спелл.
Короче, изучается сразу аура, без всяких извращений. А по нажатию кнопки "S" - стоп - она блокируется для игрока и юниту, которому нажали, выдается абила-пустышка, типа аура не действует, снова S - активируется обратно.
Минусы: ни один другой такой же герой того же игрока, пока отключена аура, выучить эту ауру не сможет в это время; иногда приказ стоп действует без ручной активации, что немного неприятно. Но это реально НЕ критично (героев одинаковых у одного игрока почти никогда не бывает, а нажать стоп не проблема, если не задизейблен, ну а что задизейбленным не можешь переключать ауру - фича).
Вот только надо будет еще учесть маловероятный, но все же возможный факт, что юнит с отключенной аурой сможет вообще перестать существовать и тогда ее включить получится в принципе невозможно. Учту периодиком...
Зато ГИГАНТСКАЯ экономия усилий при создании и НИКАКОГО прелоада не надо (в принципе 1-уровневую абилу-пустышку "аура отключена" уж можно не прелоадить, хотя можно и прелоаднуть).
ну да
CHANNEL - CAST - EFFECT - ENDCAST - FINISH
какое-то из них ты будешь использовать для стопа, и все ассоциативные триггшеры выполнятся, но не дальше, само собой.
Оказывается, отрицательную высоту для летающих зданий можно устанавливать, если поставить Art - Elevation - Sample Ponts: 0 SсRealm:
А еще можно повернуть нездание а том сделать зданием и поворот останется , правда в игре может сместитьтя внезапно))
А вместе с этим способом это, вроде бы как, решило мою проблему. Спасибо всем, кто попытался помочь :) Melissa:
И ещё заметка - делать декорации юнитами - больная идея. Если их будет сотня другая - то ещё не конец света, но несколько сотен таких "декораций" - жди проседаний в производительности.
Да там и сотни не наберется, так что все нормально :)
Создать список "станящих" баффов, при потере баффа из этого списка проверять есть у юнита еще какой либо бафф из списка.
Если нет - снимать паузу, если есть - ничего не трогать.
Ааа, ну тогда смотри
не_кликабельность Сларка делается так
а - его морфят в юнит без модельки
б - ему дают москитов и отбирают (что бы на него нельзя было кликнуть, но можно было выделить)
в - все события "атакован" приводятся к действию "стоп", если это Сларк
г - аура регена игнорирует то что Сларка видят
у тебя на пути стоит пункт Б, т.к. что бы умные люди не заменяли себе пустую модельку (пункт А) на нормальную и не могли на неё в итоге тыкать... Так что в итоге - ты можешь её заменить, но тыкнуть всё равно не сможешь... шах и мат
Ааа, ну тогда смотри
не_кликабельность Сларка делается так
а - его морфят в юнит без модельки
б - ему дают москитов и отбирают (что бы на него нельзя было кликнуть, но можно было выделить)
в - все события "атакован" приводятся к действию "стоп", если это Сларк
г - аура регена игнорирует то что Сларка видят
у тебя на пути стоит пункт Б, т.к. что бы умные люди не заменяли себе пустую модельку (пункт А) на нормальную и не могли на неё в итоге тыкать... Так что в итоге - ты можешь её заменить, но тыкнуть всё равно не сможешь... шах и мат
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
Ну чтобы перевести, из градусов в радианы
180° = pi радиан = 3,14...
Если знаешь расположение градусов в окружности (там 2pi = 360°, или pi/2 = 90°)
60° = pi/3 радиан = 3,14/3 = 1,0466
30° = pi/6 радиан = 3,14/6 = 0,5233
Или использовать готовую формулу Angle to Radians => Angle *pi / 180 (формула)
pi/180 = 3,14/180 = 0,01744 (коэффициент, записан в варе в переменную-множитель bj_DEGTORAD)
_________________
Чтобы перевести из радиан в градусы
Использую формулу Radians to Angle => Radians * 180 / pi
1 радиан = 57,32°
0,5 радиан = 0,5 * 180/3,14 = 28,6°
Используют точно также переменную-множитель bj_RADTODEG, но с другим названием. Там было Deg to Rad (перевести в радианы), здесь Rad to Deg (в градусы) тут есть погрешности до десятичных, до сотых и более. Поэтому может не соответствовать. Это как пример. Считал сам. А вообще юзайте готовые переменные и не морочьте голову
код
local unit u = GetTriggerUnit()
local real a = GetUnitFacing(u) * bj_DEGTORAD //GetUitFacing возвращает параметры в градусы, поэтому нужно перевести в радианы
local real x = GetUnitX(u) + 100. * Cos(a)
local real y = GetUnitY(u) + 100. * Sin(a)
//потом то-то делаешь. x, y
xgm.guru/p/wc3/179127тут есть пример карта, на гуи там, но переделать можно и на jass (там кастер двигается в ту сторону, куда смотрит). И пример в качестве кода, если нужно двигать относительно двух точек (сделал пример движение снаряда от Кастера к цели)
Через дамми-каст:
Создаешь пустышку с описанием и передаешь ее герою.
При касте этого спелла создаешь даммика(невидимого/пустого юнита с нужными способностями) и кастуешь нужный спелл.
Дамми при этом занят кастом спелла, а герой может делать все что угодно
ВНЕЗАПНО это делается одним действием: Игра - Enable/Disable Drag-Selection (настроенное на Disable drag-selection functionality (disable drag-selection box)).
Что такое "назначить пользовательский параметр юнита или предмета" и как им пользоваться?
Используется для сохранения каких-нибудь своих данных в этот конкретный предмет или юнита
Добрые люди, как присвоить глобальной переменной (целочисленной) цену определенного предмета (так чтобы если изменить цену в редакторе объектов, то в редакторе триггеров она сама изменялась) или какая главная характеристика определенного героя (разум, сила, ловкость).
название KillUnit не совсем подходит
я бы назвал killUnitFromUnit или просто killFromUnit Пушистый, а можно проще
define KillUnit(a) = KillUnit2(a)
по поводу правил
название должны соответствовать выполняемой функции
например если логическая переменная хранит жив юнит или нет то называться она должна isAlive или как то так
+ различные правила написания для различных языков
например в java первое слово в названии функции/переменной пишется с маленькой буквы а остальные с большой, а в названиях классов все слова с большой
в jass официальных соглашений нету но близы писали в функциях каждое слово с большой а константы большими буквами разделяя слова _
Так ты же выключаешь триггер на 18 секунд вот он и не срабатывает.
Поставь условие, что герыч не имеет абилки-пустышки, если не имеет - дать её и через 18 сек забрать и пустить молнию.
Правда я не уверен насчёт того, отловится ли attacking unit через 18 сек вейта, проверь...
Вообще, если устраивает орбом - то даёшь "сферу молний" с эффектом "цепь молний", у которой 18 сек перезарядка(у цепи не у сферы)
TripleKor, нет, есть действие - скрыть предмет, скрывает предмет с карты, делая невидимым и не выделяемым.
Орбы в как в диабло делаются из юнитов, ну а у героя событие - юнит подошел к другому юниту, условие - подошедший юнит твой дамми предмет, ну и действие думаю понятно...
Все предметы изночально принадлежать враждебным, юзайте Custom value предмета, если 0 то предмет еще никто не подобрал, значит его получили убив монстра или купили, значит ставим ему custom value с номером игрока (нумеруйте не с 0, а с 1). Легко и просто, правда?
.:GreiN:., среди mpq есть порядок обработки и war3patch.mpq имеет высший приоритет среди них
т.е. если текстура есть в war3.mpq и war3patch.mpq то будет использоваться текстура из war3patch.mpq
так что попробуй закинуть текстуру в war3patch.mpq
редактор может тупить с новыми текстурами/моделями
его нужно перезапускать чтобы всё нормально отображалось
проверяй модели и текстуры в игре
Если хочешь качественную анимацию,где двери шлюза закрываются,то сделай двери гармошкой.
А лучше сделать две модели дверей шлюза.Одни двери открыты,а другие закрыты.И менять их видимости в анимах.
анимацию апгрейда можно проиграть
а чтоб постоянная была. то прописыают триггером тэг анимации. или видел как у Иллидана? там два юнита: охотник и демон. Посмотри как у демона сделано. там есть прописано alternate
хм, щас придумаю... Возможно так : создаешь триггер с событием, ну там что-то связаное с улучшением способности (точно не помню). Далее пишешь:
создаешь структуру
создаешь локальный таймер (1-2 сек нормально)
вносишь данные в структуру
запускаешь таймер
добавляешь в структурную группу всех юнитов в регионе ( какой тебе нужно)
ForGroup добавить способность всем юнитам в группе ну и дейсвтия ауры какие там еще....
PS забыл сказать про условие в таймере:
Если у юнита нет способности , то остановить таймер, сломать структуру и тд.
Если тебе не понятно, то завтра могу тебе написать (дай мне знать)
и Еще скажи мне, ты на JNGP работаешь?
ilsva, конечно не сработает
оно всех союзников игрока 1 заставляет считать всех компов союзниками и отдать им контроль над своими войсками.
тебе нужна функция PlayerGroup from Player и поменять порядок - сперва комп, потом игрок (а для надежности можно оба направления). Ну и проверку на то, комп ли игрок делать отдельно через if и условия на Player Controller и Player Slot Status.
Общее поле зрения:
Make 'player' treat 'player2 ' as Противник с общим полем зрения
Общие войска эсть только у союзников, или моих знаний недостаточно для создания общих войск у врагов.
» WarCraft 3 / Защита карты
» WarCraft 3 / Усиление заклинаний
» WarCraft 3 / Может ли вылетать карта из-за этого триггера?
» WarCraft 3 / Как сделать чтобы предмет ''Стрелял''
» WarCraft 3 / ИИ не использует скилы
» WarCraft 3 / Вылетает карта
» WarCraft 3 / защита карты
» WarCraft 3 / Экспорт моделей
» WarCraft 3 / виндволк
» WarCraft 3 / Сквозь юнита
» WarCraft 3 / Стан
» WarCraft 3 / Москиты
» WarCraft 3 / Не выделяемый юнит
» WarCraft 3 / Как сделать способность?
» WarCraft 3 / Способности и текст
» WarCraft 3 / Поворот
» WarCraft 3 / Возможно ли такое
» WarCraft 3 / Переменные.
» WarCraft 3 / Предметы
» WarCraft 3 / По моделям.
» WarCraft 3 / хочу найти карту с моделями
» WarCraft 3 / Грейд
» WarCraft 3 / Двойной урон
» WarCraft 3 / Общие войска